//给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段，同一字母最多出现在一个片段中。
//
// 注意，划分结果需要满足：将所有划分结果按顺序连接，得到的字符串仍然是 s 。
//
// 返回一个表示每个字符串片段的长度的列表。
//
//
//示例 1：
//
//
//输入：s = "ababcbacadefegdehijhklij"
//输出：[9,7,8]
//解释：
//划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。
//每个字母最多出现在一个片段中。
//像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的，因为划分的片段数较少。
//
// 示例 2：
//
//
//输入：s = "eccbbbbdec"
//输出：[10]
//
//
//
//
// 提示：
//
//
// 1 <= s.length <= 500
// s 仅由小写英文字母组成
//
//
// Related Topics 贪心 哈希表 双指针 字符串 👍 951 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function partitionLabels(s: string): number[] {


    let hash : Map<string,number> = new Map<string, number>()
    let resArr : number[] = []
    //? 记录每个单词的最远出现位置 这是关键
    for (let i = 0; i < s.length; i ++) {
        hash.set(s[i],i)
    }
    let left: number = 0;
    let right: number = 0;
    for (let i = 0; i < s.length; i ++) {
        //? 不断更新当前子串中所有单词中最大的出现位置
        right = Math.max(right, hash.get(s[i]))
        //? 当i===rigth 说明当前子串所有单词在后面都不会出现了
        if (i === right) {
            resArr.push(right - left + 1)
            //? 更新left 好计算长度
            left = right + 1
        }
    }
    return resArr

};
//leetcode submit region end(Prohibit modification and deletion)
